package com.example.hospitaldemo.controller;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.example.hospitaldemo.entity.Ward;
import com.example.hospitaldemo.service.IWardService;
import com.example.hospitaldemo.util.ResultData;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

/**
 * <p>
 * 科室表 前端控制器
 * </p>
 *
 * @author 张三
 * @since 2024-12-16
 */
@RestController
@RequestMapping("/ward")
public class WardController {
    @Autowired
    private IWardService service;
    /**
     * 查询所有的科室
     * 根据姓名检索科室
     *      分页的功能
     * @param page 页码
     * @param size  每页显示的条数
     * @param keyword 其他条件
     * @return
     */
    @GetMapping(value = "query")
    public ResultData queryALL(
            @RequestParam(defaultValue = "1") Integer page,
            @RequestParam(defaultValue = "10") Integer size,
            @RequestParam(defaultValue = "") String keyword

    ){
        //分页所需的page对象
        Page page1 = new Page(page,size);
        //mybatis-plus的核心处理对象
        QueryWrapper queryWrapper = new QueryWrapper();
        //添加了查询条件
        queryWrapper.like("name",keyword);
        //分页查询
        service.page(page1,queryWrapper);

        return ResultData.success(page1.getTotal(),page1.getRecords());

    }

    /**
     * 新增科室----不需要主键
     * 修改科室----需要主键
     */
    @PostMapping("saveOrUpdate")
    public ResultData add(@RequestBody Ward ward){
        if (service.saveOrUpdate(ward)){
            return  ResultData.success();
        }
        return ResultData.error(101,"操作失败");
    }

    /**
     * 删除科室----需要主键
     */
    @DeleteMapping("delete")
    public ResultData delete(String id){
        if (service.removeById(id)){
            return  ResultData.success();
        }
        return ResultData.error(101,"删除科室失败");
    }

    /**
     * 查询所有的科室：
     *      用于查询医生信息时使用
     *      用于查询床位信息时使用
     */
    @GetMapping("getAll")
    public ResultData getAll(){
        return ResultData.success(service.list());
    }

    /**
     * 在入院登记功能中，查询科室以及科室对应的床位信息，为了新病人的数据新增
     *
     * 需要的是一对多
     *  一的一方就是科室
     *  多的一方就是床位
     */
    @GetMapping("getZhiliaoshiInWard")
    public ResultData getZhiliaoshiInWard(){
        //需要自己定义Mapper完成一对多的查询
        return ResultData.success(service.getZhiliaoshiInWard());
    }
}
